package cn.lg.soar.common.data;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;

/**
 * 临时缓存（作为局部变量使用，用于for循环处理时提升性能）
 * @author luguoxiang
 * 开源项目：https://gitee.com/lgx1992/lg-soar 求star！请给我star！请帮我点个star！
 */
public class TemporaryCache<K, V> {

	private final Map<K, V> cache = new ConcurrentHashMap<>();
	private final Function<K, V> loader;

	public TemporaryCache(Function<K, V> loader) {
		this.loader = loader;
	}

	/**
	 * 获取缓存，不存在则通过 loader 去加载数据
	 * @param key
	 * @return
	 */
	public V get(K key) {
		return cache.computeIfAbsent(key, loader);
	}

	/**
	 * 获取缓存的Map
	 * @return
	 */
	public Map<K, V> getCache() {
		return cache;
	}

	/**
	 * 加入缓存
	 * @param key
	 * @param value
	 */
	public void put(K key, V value) {
		cache.put(key, value);
	}

	/**
	 * 批量加入缓存
	 * @param map
	 */
	public void put(Map<K, V> map) {
		cache.putAll(map);
	}

	/**
	 * 删除缓存
	 * @param key
	 * @return
	 */
	public V remove(K key) {
		return cache.remove(key);
	}

}
